<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>初始化state</title>
    <script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>

</head>
<body>
    <div id="app">

    </div>
    <script type="text/babel">

        class Weather extends React.Component{
            constructor(props) {
                // constructor调用几次：new多少个实例对象就调用几次 由于React自己new了一次，所以就调用一次
                console.log('constructor')
                super(props);
                // 初始化状态
                this.state = {isHot:false,wind:'微风'}
                // console.log(this)
                // 解决了changeWeather中的this指向问题
                this.change = this.changeWeather.bind(this)

            }
            render(){
                // render调用几次：1+n次 1是初始化状态渲染,n是每一次调用方法呈现页面上的次数
                console.log('render')
                // console.log('this',this) 组件实例的对象(这是React自己创建的实例)
                // 读取状态
                const {isHot,wind} = this.state
                return  <h1 onClick={this.change}>今天天气很{isHot?'炎热':'凉爽'},{wind}</h1>
            }
            changeWeather(){
                /**
                 * changeWeather放在哪里? --放在了Weather实例对象的原型上,供实例使用
                 由于changeWeather是作为onClick的回调，所以不是通过实例直接调用的，是直接调用
                 类中的方法默认开启了严格模式，所以changeWeather中的this为undefined
                 */


                // changeWeather调用几次：触发事件几次就调用几次
                console.log('changeWeather')
                // console.log(this)
               const isHot = this.state.isHot
                this.setState({isHot: !isHot})
            }

        }
        ReactDOM.render(<Weather/>,document.getElementById('app'))
    </script>

</body>
</html>
